package design.pattern.combination;

/**
 * 抽象根结点
 *
 * @author AtoVio, Winter Yuan
 */
public abstract class MenuComponent {

    protected String name;

    protected int level;

    public MenuComponent(String name, int level) {
        this.name = name;
        this.level = level;
    }

    // 添加子菜单
    public void add(MenuComponent component) {
        // 只有当子类是菜单时此方法才能调用此方法，所以设计成默认抛异常
        throw new UnsupportedOperationException("该组件没有此操作，因为它可能是一个菜单项");
    }

    // 移除子菜单
    public void remove(MenuComponent component) {
        // 只有当子类是菜单时此方法才能调用此方法，所以设计成默认抛异常
        throw new UnsupportedOperationException("该组件没有此操作，因为它可能是一个菜单项");
    }

    // 获取指定子菜单
    public MenuComponent getChild(int index) {
        // 只有当子类是菜单时此方法才能调用此方法，所以设计成默认抛异常
        throw new UnsupportedOperationException("该组件没有此操作，因为它可能是一个菜单项");
    }

    // 获取名字
    public String getName() {
        return name;
    }

    // 打印菜单名称（包括子菜单和子菜单项）
    public abstract void print();
}
